跳到主要内容

解决 Git 中大小写敏感问题

案例

默认情况下,GIt 是对文件大小写不敏感的,因此当我们在项目中对某个文件重命名时,就很容易发现重命名后的文件并不会在工作区被检测出来:

而为了解决这个问题,我们可以将本地 Git 工程设置为大小写敏感:

git config core.ignorecase false

# 也可以设置为全局大小写敏感
git config -g core.ignorecase false

然后我们就会发现,再次重命名后,就能侦测到变化,并且可以进行提交代码了。这时新的问题又会接踵而至,当我们 push 到远程仓库,就会发现大写文件与小写文件会同时存在:

这着实让人感到崩溃,本地与远程仓库不一致,此时除非重新拉取整个仓库,或者执行魔法命令:git rm --cached README.md,此时重新提交一个新的 commit,才能完全一致。

如何避免大小写带来的不一致性问题?

长话短说,首先我们不要遇到问题马上就去修改 core.ignorecase 这个命令然后进行提交,因为该配置仅对本地生效,实际上远程 Git 服务或者他人的本地仓库,依然会忽略大小写,最简单的方式就是重命名时请不要只修改大小写。

若真的需要仅重命名大小写,推荐以下步骤:

  1. 备份一份文件;

  2. 删除原文件,并提交代码;

  3. 重命名第 1 步中备份的文件,并提交代码。

通过以上步骤,实际上我们生成了 2 次 commit,并执行了不同的操作,这样不论如何 Git Flow 上都能安全识别。